import pandas as pd
import re
import numpy as np
import string

train_data = pd.read_csv('weibo_train_data.txt', sep='\t')
train_data.columns = ['user_id', 'weibo_id', 'time', 'forward', 'comments', 'likes', 'tfidf', 'text']


def count_chinese(text):
    text = str(text)
    num = 0
    for s in text:
        if '\u4e00' <= s <= '\u9fff':
            num += 1
    return num


train_data['length_chinese'] = train_data['text'].map(count_chinese)


def is_en(text):
    text = str(text)
    num = 0
    for s in text:
        if s in string.ascii_letters:
            num += 1
    if num > len(text) * 0.5:
        return 1
    else:
        return 0


train_data['english'] = train_data['text'].map(is_en)


def Non_ch(text):
    text = str(text)
    num = 0
    for s in text:
        if '\u4e00' <= s <= '\u9fff':
            num += 1
    if num == 0:
        return 1
    else:
        return 0


train_data['non_ch'] = train_data['text'].map(Non_ch)


def is_sharing(text):
    text = str(text)
    if re.findall(r'分享', text, re.I):
        return 1
    if re.findall(r'推荐', text, re.I):
        return 1
    return 0


train_data['sharing'] = train_data['text'].map(is_sharing)


def is_auto(text):
    text_1 = str(text)
    text = np.array(list(str(text)))
    flag_1 = 0  # 是否包含'我...了'
    flag_2 = 0  # 是否包含'@'
    flag_3 = 0  # 是否包含http
    if re.findall(r'我.+了', text_1, re.I):
        flag_1 = 1
    if re.findall(r'@', text_1, re.I):
        flag_2 = 1
    if re.findall(r'http', text_1, re.I):
        flag_3 = 1
    if flag_1 * (flag_2 + flag_3) >= 1:
        return 1
    else:
        return 0


train_data['auto'] = train_data['text'].map(is_auto)


def is_interaction(text):
    text = str(text)
    num_1 = len(re.findall(r'//', text, re.I))
    num_2 = len(re.findall(r'http', text, re.I))
    if num_1 > num_2:
        return 1
    else:
        return 0


train_data['interaction'] = train_data['text'].map(is_interaction)


def is_book(text):
    text = str(text)
    if re.findall(r'《.+》', text, re.I):
        return 1
    else:
        return 0


train_data['book'] = train_data['text'].map(is_book)


def is_mention(text):
    text = str(text)
    if re.findall(r'@', text, re.I):
        return 1
    else:
        return 0


train_data['mention'] = train_data['text'].map(is_mention)


# i. 是否包含投票
def is_vote(text):
    text = str(text)
    if re.findall(r'投票', text, re.I):
        return 1
    else:
        return 0


train_data['vote'] = train_data['text'].map(is_vote)


# j. 是否包含抽奖
def is_lottery(text):
    text = str(text)
    if re.findall(r'抽[奖到中]', text, re.I):
        return 1
    if re.findall(r'[奖礼]品', text, re.I):
        return 1
    if re.findall(r'[好大]礼', text, re.I):
        return 1
    if re.findall(r'[赢领]取', text, re.I):
        return 1
    return 0


train_data['lottery'] = train_data['text'].map(is_lottery)


# k. 是否包含表情
def is_emoji(text):
    text = str(text)
    if re.findall(r'\[.+\]', text, re.I):
        return 1
    else:
        return 0


train_data['emoji'] = train_data['text'].map(is_emoji)


# L.是否包含视频
def is_video(text):
    text = str(text)
    if re.findall(r'【视频', text, re.I):
        return 1
    return 0


train_data['video'] = train_data['text'].map(is_video)


# M.是否包含链接
def is_http(text):
    text = str(text)
    if re.findall(r'http', text, re.I):
        return 1
    return 0


train_data['http'] = train_data['text'].map(is_http)


# 是否股票推文
def is_stock(text):
    text = str(text)
    if re.findall(r'股票', text, re.I):
        return 1
    if re.findall(r'炒股', text, re.I):
        return 1
    return 0


train_data['stock'] = train_data['text'].map(is_stock)

ad = ['天猫', '淘宝', '京东', '当当', '唯品会', '唯品会', '红包', '购物券', '折扣', '优惠']
train_data['ad'] = train_data.text.apply(lambda x: 1 if any(keyword in str(x) for keyword in ad) else 0)

baidu_hot_words = ['2015阅兵', '奔跑吧兄弟', '花干骨', 'duang', 'DUANG', '毕福剑', '完美世界', '清华大学', '九寨沟', '天津爆炸', '快乐大本营',
                   '校花的贴身高手', '车震', '金星', '大主宰', '武汉大学', '泰山', '全面开放二孩政策', 'running man', 'Running Man', 'Running man',
                   'RUNNING MAN', '盗墓笔记', '萌萌哒', '王思聪', '淘宝', '厦门大学', '颐和园', '优衣库事件', '最强大脑', '何以笙箫默', '然并卵',
                   '叶良辰', '百度', '北京大学', '故宫', '毕福剑违纪', '极限挑战', '斗鱼', '有钱就是任性', '昆凌', '我欲封天', '中山大学', '华山',
                   'a股保卫战', 'A股保卫战', '欢乐喜剧人', '琅琊榜', '不做死就不会死', '刘雯', '双色球开奖结果', '中南大学', '北戴河', '人民币贬值',
                   '天天向上', '克拉恋人', '小鲜肉', '章泽天', 'qq', 'QQ', '复旦大学', '普陀山', '2015苹果发布会', '中国好声音', '旋风少年', '绿茶婊',
                   '马云', '微信', '山东大学', '五台山', '另一个地球可能发现', '康熙来了', '终极教师', '壕', '宁泽涛', '花千骨', '浙江大学', '峨眉山',
                   '日本8.5级地震', '奇葩说', '武媚娘传奇', '我也是醉了', '柴静', '双色球', '西南大学', '云台山']
train_data['hotwords'] = train_data.text.apply(
    lambda x: 1 if any(keyword in str(x) for keyword in baidu_hot_words) else 0)
